Blog

Luis Majano

March 09, 2011

Spread the word


Share your thoughts

A few folks have asked how you can leverage MXUnit and MockBox to mock a super class class.  Here is a simple example to showcase this:

Class Parent A

<cfcomponent name="A"> 
<!--- send ---> 
<cffunction access="public" hint="" name="send" output="false" returntype="any"> 
<cfreturn parent="">
</cffunction> 
</cfcomponent> 

Class Parent B

<cfcomponent extends="A" name="B"> 
	<!--- send ---> 
	<cffunction access="public" hint="" name="send" output="false" returntype="any"> 
		<cfargument default="" hint="" name="name" required="true" type="string"> 
		<cfif arguments.name neq ""> 
			<cfreturn name="arguments.name"> 
		<cfelse> 
			<cfreturn>
		</cfif> 
	</cffunction> 
</cfcomponent>

Here is our test case, please note that we use the coldbox package for simplicity, if you are using mockbox standalone, then just follow the docs.

<cfcomponent extends="coldbox.system.testing.BaseTestCase">
<cfscript> 
function setup(){ 
    // create and prepare for mocking. 
    b = getMockBox().prepareMock( createObject("component","B") ); 
} 

function testSend(){ 
    // create a virtual super scope and mock a send method on it 
    mockSuper = getMockBox().createStub().$("send","Mocked Super"); 
    
    // inject the mock super into the variables scope 
    b.$property("super","variables", mockSuper); 
    
    // send method call 
    r = b.send(); 
    
    // use simple mxunit debug to show results. 
    debug(r); 
} 
</cfscript>
</cfcomponent>

So as you can see, the super scope is just another reference in the variables scope, so I can easily create a MockBox stub and mock away. You can also be more concise if you want to leave the methods intact in the super scope by creating a mock of the parent class:

getMockBox().createMock("A").$("send","Mocked Super");

 

Add Your Comment

(2)

Mar 10, 2011 09:03:09 UTC

by Chris Tierney

Thanks Luis for this great write up! What is you opinion on mocking a super class? Should it be mocked as the example provides or should it generally be treated as an all-in-one?

May 14, 2013 12:43:43 UTC

by duncan

Thanks for this useful post. It's a shame the blog has screwed up the layout of the code block. Also the date of the post is reading as 1111 for the year

Recent Entries

Into the Box is Going Online, Register Now!

Into the Box is Going Online, Register Now!

Dive into the Future of Web Development with Into the Box 2024 - now going global and online! No matter where you are, you're invited to join us for an amazing and enriching two-day experience on May 16th and 17th, packed with groundbreaking insights, expert sessions, and game-changing announcements.

Maria Jose Herrera
Maria Jose Herrera
May 01, 2024
Into the Box 2024: Your Gateway to the Future of Tech!

Into the Box 2024: Your Gateway to the Future of Tech!

Are you ready to advance your coding skills? The future of Modern Web Development awaits at Into the Box 2024, and we're thrilled to announce that due to high demand, we're extending our Early Bird pricing for an additional week!

Maria Jose Herrera
Maria Jose Herrera
April 26, 2024